package ooday03;
/** 测试类 */
public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("小黑",2,"黑");
        System.out.println(dog.name);
        dog = null; //表示空，没有指向任何对象
        //System.out.println(dog.name); //发生空指针异常

        /*
        引用类型数组与基本类型数组的区别:
        1)给引用类型数组的元素赋值时，需要new个对象
        2)访问引用类型数组的元素的属性或行为时，需要打点访问
         */
        Dog[] dogs = new Dog[3];
        dogs[0] = new Dog("小黑",2,"黑");
        dogs[1] = new Dog("小白",3,"白");
        dogs[2] = new Dog("小灰",4,"灰");
        System.out.println(dogs[0].name); //输出第1只狗狗的名字
        dogs[1].age = 5; //修改第2只狗狗的年龄为5岁
        dogs[2].swim(); //第3只狗狗在游泳
        for(int i=0;i<dogs.length;i++){ //遍历dogs数组
            System.out.println(dogs[i].name); //输出每只狗狗的名字
            dogs[i].eat(); //每只狗狗吃饭
            dogs[i].lookHome(); //每只狗狗看家
        }

        Chick[] chicks = new Chick[2];
        chicks[0] = new Chick("小花",2,"棕");
        chicks[1] = new Chick("小黄",1,"黄");
        for(int i=0;i<chicks.length;i++){
            System.out.println(chicks[i].name);
            chicks[i].layEggs();
            chicks[i].eat();
        }

        Fish[] fish = new Fish[4];
        fish[0] = new Fish("小金",1,"金");
        fish[1] = new Fish("小红",2,"红");
        fish[2] = new Fish("小蓝",3,"蓝");
        fish[3] = new Fish("小黑",4,"黑");
        for(int i=0;i<fish.length;i++){
            System.out.println(fish[i].name);
            fish[i].swim();
            fish[i].drink();
        }
    }
}

/*
综合练习
设计：达内员工管理系统(包含超类、接口、派生类)
1)教研总监：名字、年龄、工资、上班打卡()、下班打卡()、完成工作()、解决企业问题()、培训员工()、编辑书籍()
2)讲师：名字、年龄、工资、上班打卡()、下班打卡()、完成工作()、解决企业问题()、培训员工()、编辑书籍()
3)项目经理：名字、年龄、工资、上班打卡()、下班打卡()、完成工作()、编辑书籍()
4)班主任：名字、年龄、工资、上班打卡()、下班打卡()、完成工作()

设计方案
1)雇员超类(抽象类)：名字、年龄、工资，2个普通方法：上班打卡(){}、下班打卡(){}，1个抽象方法：abstract 完成工作()
2)企业顾问接口：解决企业问题()、培训员工()
3)技术作者接口：编辑书籍()
4)教研总监类：继承雇员超类，实现企业顾问接口和技术作者接口，重写4个抽象方法：完成工作(){}、解决企业问题(){}、培训员工(){}、编辑书籍(){}
5)讲师类：继承雇员超类，实现企业顾问接口和技术作者接口，重写4个抽象方法：完成工作(){}、解决企业问题(){}、培训员工(){}、编辑书籍(){}
6)项目经理类：继承雇员超类，实现技术作者接口，重写2个抽象方法：完成工作(){}、编辑书籍(){}
7)班主任类：继承雇员超类，重写1个抽象方法:完成工作(){}
*/
